// 请求相关类
const BASE_URL = ''
// 未登录状态码
const NO_LOGIN = 200
class Req {
	constructor(resultParams = {}) {
		this.result_code = resultParams.code || 'code' // code字段名
		this.result_data = resultParams.data || 'result' // data字段名
		this.result_msg = resultParams.msg || 'message' // msg字段名
		this.result_ok = resultParams.ok || 200 // 成功标志
		this.page_num = resultParams.page || 'page' // 分页参数当前第几页
		this.page_size = resultParams.pageSize || 'pageSize' // 分页参数显示多少条
		this.ENV = resultParams.baseURL || BASE_URL // 全局配置URL
		this.uploadUrl = resultParams.uploadUrl // 上传图片地址
	}
	
	_req(params) {
		const that = this
		return new Promise((resolve, rej) => {
			uni.request({
				url: `${this.ENV}${params.url}`,
				dataType: 'json',
				// 配置请求头信息
				header: {
					'content-type': 'application/x-www-form-urlencoded'
				},
				data: params.data,
				method: params.method,
				success(res) {
					const {
						statusCode,
						data
					} = res
					if (statusCode === 200) {
						let result = res.data
						if (result[that.result_code] === that.result_ok) {
							resolve(result[that.result_data])
						} else {
							rej(result)
						}
					} else {
						rej('请求失败!')
					}
				},
				fail(e) {
					console.error(e)
					rej(e)
				},
				complete(res) {
					// resolve(res)
				}
			})
		})
	}
	
	// post请求
	post(url, data, isPager) {
		return new Promise((resolve, rej) => {
			this._req({
				url,
				data,
				method: 'POST'
			}).then((data, res) => {
				resolve(data)
			}).catch((msg, res) => {
				rej(msg)
			})
		})
	}
	
	// get请求
	get(url, data) {
		return new Promise((resolve, rej) => {
			this._req({
				url,
				data,
				method: 'GET'
			}).then((data, res) => {
				resolve(data)
			}).catch((msg, res) => {
				rej(msg)
			})
		})
	}
	
	// 未登录操作
	toLogin() {
		console.log('未登录..........')
	}
	
	// 外部调用请求
	// data[0]请求参数,data[1]是否分页,分页参数
	req(api, data = {}) {
		api = { ...api }
		return new Promise((resolve, rej) => {
			if (typeof data === 'object' && !uni.$u.test.array(data)) {
				data = [data, false]
			}
			// 如果是分页查询，不提示
			if (data[1]) {
				// 只传了页数
				if (typeof data[1] === 'number') {
					data[1] = [data[1], 10]
				}
				// data[1] = data[1].split(',') // 1,10
				let pager = {
					[this.page_size]: Number(data[1][1]), // pagesize
					[this.page_num]: Number(data[1][0]), // pagenum
				}
				data[0] = Object.assign({}, data[0], pager)
			}
			
			api.method = api.method.toLowerCase()
			if (this[api.method] && typeof this[api.method] === 'function') {
				this[api.method](api.url, data[0], data[1]).then((data, res) => {
					resolve(data)
				}).catch((res) => {
					if (res[this.result_code] === NO_LOGIN) {
						// 未登录
						this.toLogin()
					}
					rej(res)
				})
			}
		})
	}
}
export default Req